/** @file
 * Options.h
 *
 *  Created on: 2012-03-05
 *  @author: Kamil Mówiński <xnasterx@gmail.com>
 */

#ifndef OPTIONS_H_
#define OPTIONS_H_
#include <SDL/SDL_thread.h>
#include <SDL/SDL.h>
#include <iostream>
#include <queue>


/** Klasa realizująca odczytywanie z konsoli parametrów
 * wpisywanych przez użytkownika. Realizuję także parsowanie
 * danych wpisywanych przez użytkownika oraz ustawia odpowiednie wartości
 */
class Options {
	/** Pole odpowiadające za równoległy wątek sprawdzający stan
	 * konsoli
	 */
	SDL_Thread * thread_opc;
	/** Kolejka przechowująca niesparsowane dane wpisane przez
	 * użytkownika
	 */
	std::queue<char*> opt;

public:
	/** Konstruktor inicjalizujący nowy wątek */
	Options();
	/** Destruktor kończący wątęk */
	virtual ~Options();
	/** Metoda wrzucająca do kolejki opt kolejne opcje wpisywane przez
	 * użytkownika
	 * @param str ciąg znaków wpisanych przez użytkownika
	 */
	void PutOption(char * str);
	/** Metoda oddająca pierwszą w kolejce opt opcje do sparsowania
	 * @return ciąg znaków odpowiadający ciągowi wpisanemu przez użytkownika
	 */
	char* GetOption(void);
	/** Metoda przetwarzająca pierwszą w kolejce opt opcje. */
	void Process(void);

	/** Pole mówiące czy poruszanie kamerą za pomocą myszki
	 * powinno być włączone
	 */
	bool mouse;
	/** Pole mówiące czy powinna być wyświetlana ilość klatek
	 * na sekundę
	 */
	bool fps;
	/** Pole mówiące czy powinna być wyświetlana informacja
	 * o stanie silników
	 */
	bool engine;
	/** Pole przechowujące jaką prędkość jest uznana za maksymalna */
	int maxSpeed;

};

/** Funkcja drugiego wątku, która pobiera z standardowego strumienia
 * dane od użytkownika
 * @param data wskaźnik na strukturę przechowująca dane na ten temat (koniecznie typu Options)
 */
int GetOptions(void * data);
#endif /* OPTIONS_H_ */
